package com.achao.basecommon.utils;

import com.achao.basecommon.exception.MusicCommonException;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;

import java.util.LinkedList;
import java.util.List;

/**
 * 描述：公共-工具类
 *
 * @Author：yangchao
 * @CreateDate：2023/1/11 15:01
 */
public class CommonUtils {

    /**
     *  描述：校验前端参数-公共工具类
     *      @Param：bindingResult
     *      @Returen：errorString
     */
    public static String paramsValidataUtils(BindingResult bindingResult){
        if (bindingResult.hasErrors()){
            //校验结果以集合的形式返回，当然也可以获取单个。具体可以查看bindResult的API文档
            List<FieldError> fieldErrorList = bindingResult.getFieldErrors();
            //StringBuilder组装异常信息
            StringBuilder builder = new StringBuilder();
            //遍历拼装
            fieldErrorList.forEach(error -> {
                builder.append(error.getDefaultMessage());
            });
            return builder.toString();
        }
        return null;
    }

    /**
     *  描述：校验json对象指定参数是否为空
     *      @Param：json
     *      @Returen：void
     */
    public static void verifyThatTheParamsIsNull(JSONObject json,Object... fieldToBeVerified){
        for(Object item : fieldToBeVerified){
            String fieldName = item.toString();
            if(StringUtils.isEmpty(json.getString(fieldName))){
                throwMusicConmonException(fieldName + "不能为空！");
            }
        }
    }

    /**
     *  描述：分页参数定义
     *      @Param：pageNum
     *      @Param：pageSize
     *      @Returen：void
     */
    public static void setPageHelperParam(Integer pageNum,Integer pageSize){
        PageHelper.startPage(
                0 == pageNum ? 1 : pageNum,
                0 == pageSize ? 10 : pageSize
        );
    }
    /**
     *  描述：物理分页-返回分页对象
     *      @Param：pageList
     *      @Returen：PageInfo
     */
    public static PageInfo getPageInfo(List<Object> pageList){
        PageInfo pageInfo = new PageInfo(pageList);
        return pageInfo;
    }

    /**
     *  描述：物理分页-返回分页对象
     *      @Param：pageList
     *      @Returen：PageInfo
     */
    public static PageInfo getPageInfo(LinkedList<Object> pageList){
        PageInfo pageInfo = new PageInfo(pageList);
        return pageInfo;
    }

    /**
     *  描述：抛异常-工具方法
     *      @Param：message
     */
    public static void throwMusicConmonException(String message){
        throw new MusicCommonException(message);
    }
}
